#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
using namespace std;

const int N = 1e6 + 10, INF = 0x3f3f3f3f;

int d;
string s;

void solve()
{
    while (cin >> s >> d) {
        int n = s.length();
        stack<int> st[10];
        priority_queue<PII, vector<PII>, greater<PII>> q[10];
        vector<int> g[10], vis(n);

        d++;
        for (int i = 1;i <= min(d, n - 1);i++)
            st[s[i] - '0'].push(i);

        for (int i = 0;i < n;i++) {
            if (i > 0 && i + d < n) {//i > 0防止i + d重复入队
                st[s[i + d] - '0'].push(i + d);
            }
            if (vis[i] == 0) {//贪心，对于i尽量选则最大的j与i互换
                for (int j = 9;j > s[i] - '0';j--)
                    if (st[j].size() && st[j].top() > i) {
                        vis[st[j].top()] = 1;
                        g[j].push_back(i);
                        st[j].pop();
                        break;
                    }
            }
        }

        for (int i = n - 1;i >= 0;i--) {
            int x = s[i] - '0';
            if (vis[i]) {
                //g：暂存哪些位置计划和该数字进行交换。
                //pq[0~9]：小根堆，用于后续选取最合适的交换对象（按优先级选最小数字和最靠前位置）。
                while (g[x].size() && g[x].back() + d >= i) {//处理j可以与前面哪些数互换，尽量选择最靠后的i位置与j互换,同时保证不会超过窗口大小
                    int w = g[x].back();
                    q[x].push({ s[w] - '0',w });
                    g[x].pop_back();
                }
                int y = q[x].top().second;
                q[x].pop();
                swap(s[i], s[y]);
            }
        }
        cout << s << '\n';
    }
}

signed main()
{
    //ios::sync_with_stdio(0);
    //cin.tie(0);cout.tie(0);
#define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
    std::istringstream in(R"()");
    std::cin.rdbuf(in.rdbuf());
#endif
    int T = 1;
    //cin>>T;
    for (int i = 1;i <= T;i++) {
        solve();
    }
}